package com.my.chapter18;

import java.io.*;
import java.nio.*;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeUnit;
import java.util.zip.*;

public class Test {
    private static final int BSIZE = 1024;
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        SerialCtl.main(args);
    }
}

class SerialCtl implements Serializable{
    private String a;
    private transient String b;
    public SerialCtl(String aa,String bb){
        a = "Not transient：" + aa;
        b = "Transient：" + bb;
    }

    @Override
    public String toString() {
        return a + "\n" + b;
    }

    private void writeObject(ObjectOutputStream stream) throws IOException{
        stream.defaultWriteObject();
        stream.writeObject(b);
    }
    private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
        stream.defaultReadObject();
        b = (String) stream.readObject();
    }

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        SerialCtl sc = new SerialCtl("Test1","Test2");
        System.out.println("Before：\n" + sc);
        ByteArrayOutputStream buf = new ByteArrayOutputStream();
        ObjectOutputStream o = new ObjectOutputStream(buf);
        o.writeObject(sc);
        ObjectInputStream in = new ObjectInputStream(
                new ByteArrayInputStream(buf.toByteArray())
        );
        SerialCtl sc2 = (SerialCtl) in.readObject();
        System.out.println("After：\n" + sc2);
    }
}

/*Output：
Before：
Not transient：Test1
Transient：Test2
After：
Not transient：Test1
Transient：Test2
*/